package skladowisko.transport;

import java.util.Date;
import java.util.List;
import obslugaTransportu.RaportObslugiTransportu;
import optymalizacjaSkladowania.PropozycjaPrzydzialow;
import skladowisko.Kontener;

/**
 *
 * @author Krzysiek
 */
public abstract class Transport
{
    protected int id;
    private static int nextId = 1;

    private String nazwa;
   
    private StatusTransportu status = StatusTransportu.PLANOWANY;
    private Date planowanaData;
    private Date rzeczywistaData;
    private Date opoznienie;
    private Transportujacy srodekTransportu;


    public Transport()
    {        
        id = nextId;
        nextId++;
    }

    //***************************************************************************
    public abstract RaportObslugiTransportu obsluz(PropozycjaPrzydzialow przydzialy);
    public abstract String pokazSzczegoly();
    //***************************************************************************
    public void setStatus(StatusTransportu status)
    {
        this.status = status;
    }
    //***************************************************************************
    public static boolean czyMoznaRownolegle(Transport t1, Transport t2)
    {
        //TODO
        return false;
    }
    //***************************************************************************
    public int getIloscKontenerow()
    {
        return getSrodekTransportu().iloscKontenerow();
    }
    //***************************************************************************
    public List<Kontener> getKontenery()
    {
        return getSrodekTransportu().pobierzZawartosc();
    }

    /**
     * @param planowanaData the planowanaData to set
     */
    public void setPlanowanaData(Date planowanaData)
    {
        this.planowanaData = planowanaData;
    }

    /**
     * @param rzeczywistaData the rzeczywistaData to set
     */
    public void setRzeczywistaData(Date rzeczywistaData)
    {
        this.rzeczywistaData = rzeczywistaData;
    }

    /**
     * @param opoznienie the opoznienie to set
     */
    public void setOpoznienie(Date opoznienie)
    {
        this.opoznienie = opoznienie;
    }

    /**
     * @param srodekTransportu the srodekTransportu to set
     */
    public void setSrodekTransportu(Transportujacy srodekTransportu)
    {
        this.srodekTransportu = srodekTransportu;
    }
    //***************************************************************************
    public int getId()
    {
        return this.id;
    }

    /**
     * @return the status
     */
    public StatusTransportu getStatus() {
        return status;
    }

    /**
     * @return the planowanaData
     */
    public Date getPlanowanaData() {
        return planowanaData;
    }

    /**
     * @return the rzeczywistaData
     */
    public Date getRzeczywistaData() {
        return rzeczywistaData;
    }

    /**
     * @return the opoznienie
     */
    public Date getOpoznienie() {
        return opoznienie;
    }

    /**
     * @return the srodekTransportu
     */
    public Transportujacy getSrodekTransportu() {
        return srodekTransportu;
    }
    //***************************************************************************

    public String getNazwa()
    {
        return this.nazwa;
    }

    public void setNazwa(String nazwa)
    {
        this.nazwa = nazwa;
    }
}
